home *** CD-ROM | disk | FTP | other *** search
/ Aminet 13 / Aminet 13 - August 1996.iso / Aminet / dev / e / energy.lha / Energy / Easy / mybranch.e < prev    next >
Text File  |  1996-05-18  |  2KB  |  67 lines

  1.  
  2.     /* mydir.e */
  3.  
  4. MODULE 'dos/dos','dos/dosextens','exec/memory'
  5.  
  6. ->    extern struct FileLock *Lock(),*DupLock(),*ParentDir()
  7.  
  8. PROC main()
  9.  
  10. DEF oldlock:PTR TO filelock -> fissa un Lock di scrittura sulla directory corrente
  11.  
  12.        oldlock := Lock('',ACCESS_READ)
  13.     
  14.            IF (oldlock <> 0)
  15.  
  16.                    WriteF('\nPath  della directory corrente: ')
  17.         
  18.                /* non scrive lo slash se si trova al livello minimo*/
  19.                    followpath(oldlock,0)
  20.             ELSE
  21.                    WriteF('\n Non posso operare un lock sulla directory corrente\n')
  22.         ENDIF
  23.     WriteF('\n')
  24.     ENDPROC
  25.  
  26. PROC followpath(lock:PTR TO filelock,printslash)    
  27.  
  28. DEF     myinfo:PTR TO fileinfoblock,
  29.     newlock:PTR TO filelock,
  30.     success,error
  31.         
  32.     /* se raggiunge la fine non stampa nulla */
  33.  
  34.     IF (lock)=NIL THEN RETURN 0    
  35.     
  36.         myinfo :=  AllocMem(SIZEOF fileinfoblock,MEMF_CLEAR)
  37.         IF (myinfo = 0) 
  38.             WriteF('out of memory\n')
  39.             RETURN 0
  40.         ENDIF     
  41.         /* guarda se esiste una directory superiore  */
  42.         newlock := ParentDir(lock)
  43.         error := IoErr()   
  44.  
  45.        /* newlock può fallire o per un errore o perché    qualcuno ha rimosso il disco */
  46.  
  47.         IF ((newlock = 0) AND (error <> 0)) THEN
  48.               WriteF('\n DISK I/O ERROR!  value = \d\n',error)
  49.         
  50.         /* richiama la funzione ricorsivamente sino alla directory primaria */
  51.  
  52.         followpath(newlock,1)
  53.         
  54.         
  55.         success := Examine(lock, myinfo)
  56.         IF (success) THEN WriteF('\s',myinfo.filename)
  57.                IF (newlock = 0) 
  58.                       WriteF(':')
  59.                ELSE
  60.         /* stampa lo slash solo se il parametro non è zero */
  61.                 IF (printslash) THEN WriteF('/')
  62.             ENDIF
  63.            UnLock(lock)
  64.         IF (myinfo) THEN FreeMem(myinfo, SIZEOF fileinfoblock)
  65.         RETURN 1
  66. ENDPROC
  67.